//let 定义一个仅作用于该代码块的变量 考虑用自执行函数FIEE
(function a() {
    var a =1;
    console.log(a);
})()
//此处a就拿不到上边的值了
console.log(a);


//const 主要是声明了之后不可以再修改 其实如果是引用类型可以添加属性的 只是不可以更换指针或者存储的栈内容
//利用object.DefineProperty 可以重写属性 让其不可以再被编辑 同时通过window对来来挂载这个值或者自定义一个对象
var _const = function (key,value) {
    window[key] = value;
    Object.defineProperty(window,key,{
        configurable: false,//必须  那么不可以修改, 不可以删除.delete a
        get: function () {
            return value;
        },
        set: function (newValue) {
            if (newValue !== value) {
                throw TypeError("只读变量，不可修改");
            } else {
                return value;
            }
        },
    })
}

_const('a',1);
console.log(a);